﻿using System.IO;
using Microsoft.Data.Sqlite;

namespace Iot.HistoryVault;

/// <summary>
///     定义ISqlIetHistoryVault接口，用于历史数据 vault 的SQL操作
/// </summary>
public interface ISqlIetHistoryVault
{
    /// <summary>
    ///     数据库文件路径常量
    ///     使用@符号表示原始字符串，避免转义字符的处理
    /// </summary>
    private const string DbPath = @".\history\history_vault.db";

    /// <summary>
    ///     SQLite数据库连接字符串常量
    ///     包含数据源和连接池设置
    /// </summary>
    private const string ConnectionString = $"Data Source={DbPath};Pooling=True;Mode=ReadWriteCreate";

    /// <summary>
    ///     静态构造函数，用于初始化数据库目录
    ///     确保数据库文件所在的目录存在
    /// </summary>
    static ISqlIetHistoryVault()
    {
        // 获取数据库文件的完整路径
        var absolutePath = Path.GetFullPath(DbPath);
        // 如果路径包含文件名，则获取目录路径
        if (Path.HasExtension(absolutePath)) absolutePath = Path.GetDirectoryName(absolutePath);
        // 如果目录路径不为空且不存在，则创建目录
        if (absolutePath is not null && !Directory.Exists(absolutePath)) Directory.CreateDirectory(absolutePath);
    }

    /// <summary>
    ///     受保护的静态属性，返回SQLite数据库连接
    ///     使用连接字符串创建新连接实例
    /// </summary>
    protected static SqliteConnection Connection => new(ConnectionString);

    /// <summary>
    ///     内部方法，获取数据库连接
    ///     返回SQLiteConnection实例供数据库操作使用
    /// </summary>
    /// <returns>SQLite数据库连接对象</returns>
    internal SqliteConnection GetConnection()
    {
        return Connection;
    }
}